<?php

namespace app\admin\controller\general;

use app\common\controller\Backend;
use app\common\model\AttachmentModel;
use app\common\model\AttachmentNavModel;
use think\Db;

/**
 * 附件分类管理控制器
 * Class Nav
 * @package app\admin\controller\general
 */
class Nav extends Backend
{

    /**
     * Attachment模型对象
     * @var \app\common\model\AttachmentNavModel
     */
    protected $model = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->model = new AttachmentNavModel();

    }

    /**
     * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个基础方法、destroy/restore/recyclebin三个回收站方法
     * 因此在当前控制器中可不用编写增删改查的代码,除非需要自己控制这部分逻辑
     * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
     */

    /**
     * 获取列表
     * @return mixed|string|\think\response\Json
     * @throws \think\exception\DbException
     */
    public function index()
    {
        if (request()->isAjax()) {
            $list = Db::name('attachment_nav')
                ->where(['pid' => 0])
                ->select();
            if (!empty($list)) {
                foreach ($list as &$v) {
                    $v['children'] = Db::name('attachment_nav')
                        ->where(['pid' => $v['id']])
                        ->select();
                }
            }

            return json([
                'list' => $list
            ]);
        }

        return $this->fetch();
    }


    // 添加/编辑
    public function add()
    {
        $data = input('post.');
        if (!empty($data)) {
            // 添加
            if (empty($data['id'])) {
                unset($data['id']);
                $data['create_time'] = time();
                if ($this->model->add($data)) {
                    return json([
                        'code' => 200,
                        'msg'  => '添加成功'
                    ]);
                } else {
                    return json([
                        'code' => 400,
                        'msg'  => '添加失败'
                    ]);
                }
            }

            // 编辑
            $data['update_time'] = time();
            if ($this->model->edit($data)) {
                return json([
                    'code' => 200,
                    'msg'  => '编辑成功'
                ]);
            } else {
                return json([
                    'code' => 400,
                    'msg'  => '编辑失败'
                ]);
            }
        }
    }

    /**
     * 更改状态
     * @return \think\response\Json
     */
    public function status()
    {
        $data     = input('param.');
        $editData = [
            'id'     => $data['id'],
            'status' => $data['status']
        ];

        if ($this->model->edit($editData)) {
            return json([
                'code' => 200,
                'msg'  => '更改成功'
            ]);
        } else {
            return json([
                'code' => 400,
                'msg'  => '更改失败'
            ]);
        }
    }

    // 删除
    public function dell(AttachmentModel $attachmentModel)
    {
        $id = input('id');
        if (!empty($id)) {
            $ids = strpos($id, ',') !== false ? explode(',', $id) : [$id];
            foreach ($ids as $v) {
                if (!$this->model->getItem((int)$v)) {
                    return json(['code' => 401, 'msg' => '您要删除掉分类不存在']);
                }
                if ($this->model->where(['pid' => $v])->value('id')) {
                    return json(['code' => 402, 'msg' => '当前分类下还有子类暂无法删除']);
                }
                if ($attachmentModel->where(['nid' => $v])->value('id')) {
                    return json(['code' => 403, 'msg' => '当前分类下有附件暂无法删除']);
                }
            }
            foreach ($ids as $v) {
                $this->model->del(['id' => $v]);
            }
            return json(['code' => 200, 'msg' => '删除成功']);
        }
    }
}
